desc:witti delay_sat_x exclue2prod edition

slider1:250<10,1000,1>TIME
slider2:1<0,1,1>SYNC
slider3:9<0,19,1{1/1,1/2 d,1/1 t,1/2,1/4 d,1/2 t,1/4,1/8 d,1/4 t,1/8,1/16 d,1/8 t,1/16,1/32 d,1/16 t,1/32,1/64 d,1/32 t,1/64,1/64 t}>DELAY
slider4:-3<-30,0,1>FEEDBACK
slider5:0<-30,0,1>DRY
slider6:-6<-30,0,1>WET
slider7:100<0,100,1>LP
slider8:0<0,100,1>HP
slider9:0<0,100,1>SATURATION
slider10:0.8<0.8,8,0.1>LP RES
slider11:0.8<0.8,8,0.1>HP RES
slider12:0<-30,12,0.1>-

in_pin:L in
in_pin:R in
out_pin:L out
out_pin:R out

@init
b = 0;

@slider
vf = slider4 <= -30.0 ? 0.0 : 10^(slider4/20);
vm = slider12 <= -30.0 ? 0.0 : 10^(slider12/20);
vw = slider6 <= -30.0 ? 0.0 : 10^(slider6/20);
vd = slider5 <= -30.0 ? 0.0 : 10^(slider5/20);

foo = slider9/200*$pi;
bar = sin(slider9/200*$pi);

(old_s10 != slider8 && slider8 > slider7) ? slider7 = slider8;
(old_s12 != slider7 && slider7 < slider8) ? slider8 = slider7;
old_s10 = slider8;
old_s12 = slider7;

//LPF:
// frequency slider scaling
tmpxA = 16+slider7*1.20103;
tmpyA = floor(exp(tmpxA*log(1.059))*8.17742);

// filter calculation
fA = 2*$pi * min(tmpyA, 0.49 * srate) / srate;
qA = slider10;

w0A = fA;
cos_w0A = cos(w0A);
alphaA = sin(w0A) / (2*qA);

b1A = 1 - cos_w0A;
b0A = b2A = 0.5 * b1A;
a0A = 1 + alphaA;
a1A = -2 * cos_w0A;
a2A = 1 - alphaA;

a1A /= a0A;
a2A /= a0A;
b0A /= a0A;
b1A /= a0A;
b2A /= a0A;

//HPF:
// frequency slider scaling
tmpxB = 16+slider8*1.20103;
tmpyB = floor(exp(tmpxB*log(1.059))*8.17742);

// filter calculation
fB = 2*$pi * min(tmpyB, 0.49 * srate) / srate;
qB = slider11;

w0B = fB;
cos_w0B = cos(w0B);
alphaB = sin(w0B) / (2*qB);

b1B = -1 - cos_w0B;
b0B = b2B = -0.5 * b1B;
a0B = 1 + alphaB;
a1B = -2 * cos_w0B;
a2B = 1 - alphaB;

a1B /= a0B;
a2B /= a0B;
b0B /= a0B;
b1B /= a0B;
b2B /= a0B;

@block
slider3==0?(
grid=1;
);
slider3==1?(
grid=3/4;
);
slider3==2?(
grid=2/3;
);
slider3==3?(
grid=1/2;
);
slider3==4?(
grid=3/8;
);
slider3==5?(
grid=1/3;
);
slider3==6?(
grid=1/4;
);
slider3==7?(
grid=3/16;
);
slider3==8?(
grid=1/6;
);
slider3==9?(
grid=1/8;
);
slider3==10?(
grid=3/32;
);
slider3==11?(
grid=1/12;
);
slider3==12?(
grid=1/16;
);
slider3==13?(
grid=3/64;
);
slider3==14?(
grid=1/24;
);
slider3==15?(
grid=1/32;
);
slider3==16?(
grid=3/128;
);
slider3==17?(
grid=1/48;
);
slider3==18?(
grid=1/64;
);
slider3==19?(
grid=1/96;
);

sync = ((grid*240)/tempo)*1000;

slider2 == 0 ? (
tmp2 = slider1;
):(
tmp2 = sync;
slider1 = tmp2;
);

tmp = bs;
bs = (tmp2 * srate / 1000)|0;
tmp < bs ? freembuf(bs*2+1);

@sample
slider9 ? (
b[0] = min(max( sin(max(min(spl0*vm+b[0]*vf,0.1),-0.1)*foo)/bar ,-0.1) ,0.1);
b[1] = min(max( sin(max(min(spl1*vm+b[1]*vf,0.1),-0.1)*foo)/bar ,-0.1) ,0.1);
):(
b[0] = spl0*vm+b[0]*vf;
b[1] = spl1*vm+b[1]*vf;
);
(b+=2) >= (bs*2) ? b=0;

//Left
x2AA = x1AA;
x1AA = x0AA;
x0AA = b[0];

y2AA = y1AA;
y1AA = y0AA;
y0AA = b0A*x0AA + b1A*x1AA + b2A*x2AA - a1A*y1AA - a2A*y2AA;

//Right
x2BA = x1BA;
x1BA = x0BA;
x0BA = b[1];

y2BA = y1BA;
y1BA = y0BA;
y0BA = b0A*x0BA + b1A*x1BA + b2A*x2BA - a1A*y1BA - a2A*y2BA;

//Output
out0 = y0AA;
out1 = y0BA;

//Left
x2AB = x1AB;
x1AB = x0AB;
x0AB = out0;

y2AB = y1AB;
y1AB = y0AB;
y0AB = b0B*x0AB + b1B*x1AB + b2B*x2AB - a1B*y1AB - a2B*y2AB;

//Right
x2BB = x1BB;
x1BB = x0BB;
x0BB = out1;

y2BB = y1BB;
y1BB = y0BB;
y0BB = b0B*x0BB + b1B*x1BB + b2B*x2BB - a1B*y1BB - a2B*y2BB;

//Output
out2 = y0AB;
out3 = y0BB;

spl0 = spl0*vd+out2*vw;
spl1 = spl1*vd+out3*vw;

@gfx 0 46
gfx_x=gfx_y=10;
gfx_r=gfx_b=0;gfx_g=gfx_a=1;
gfx_drawchar($'L');
gfx_drawchar($'P');
gfx_drawchar($' ');
gfx_drawchar($'=');
gfx_drawchar($' ');
gfx_drawnumber(tmpyA,0);
gfx_drawchar($' ');
gfx_drawchar($'H');
gfx_drawchar($'z');
gfx_x=10;gfx_y=30;
gfx_drawchar($'H');
gfx_drawchar($'P');
gfx_drawchar($' ');
gfx_drawchar($'=');
gfx_drawchar($' ');
gfx_drawnumber(tmpyB,0);
gfx_drawchar($' ');
gfx_drawchar($'H');
gfx_drawchar($'z');
